package com.marvels.system.permission.dao;

import java.util.List;

import org.apache.ibatis.annotations.Param;

import com.github.pagehelper.Page;
import com.marvels.common.dto.UserLoginInfoDTO;
import com.marvels.common.exception.MarvelsBusinessException;
import com.marvels.system.permission.dto.SysRoleDTO;
import com.marvels.system.permission.dto.SysUserDTO;
import com.marvels.system.permission.dto.SysUserParamDTO;
import com.marvels.system.permission.dto.SysUserRoleDTO;

public interface SysUserDao {
	/**
	 * 删除用户
	 * @param record
	 * @return
	 */
    int deleteByPrimaryKey(SysUserDTO record);
    
    /**
     * 新增用户
     * @param record
     * @return
     */
    int insert(SysUserDTO record);
    
    /**
     * 新增用户角色关系
     * @param list
     * @return
     */
    int insertRelation(List<SysUserRoleDTO> list);

    int insertSelective(SysUserDTO record);

    /**
     * 查询用户
     * @param record
     * @return
     */
    SysUserDTO selectByPrimaryKey(SysUserDTO record);
    
    /**
	 * 查询登录用户 
	 * @param userCode
	 * @return
	 */
	List<SysUserDTO> selectUserByUserCode(String userCode);
    
    
    /**查询唯一值
     * @param record
     * @return
     */
    SysUserDTO selectSysUser(SysUserDTO record);

    int updateByPrimaryKeySelective(SysUserDTO record);
    
    /**
     * 更新用户
     * @param record
     * @return
     */
    int updateByPrimaryKey(SysUserDTO record);
    
    /**
     * 删除用户角色关系
     * @param record
     * @return
     */
    int deleteRelation(SysUserDTO record);
    
    /**
     * 根据组织机构分页查询用户
     * @param record
     * @return
     */
    public Page<SysUserDTO> selectUserPageByOrgCode(SysUserDTO record);
    
    public Page<SysUserDTO> selectUserPageByOrgCode1(SysUserDTO record);
    
    /**
     * 根据用户编码查询记录数
     * @param userCode
     * @return
     */
    Integer selectCountByUserCode(String userCode);
    
    /**
     * 根据用户名称查询记录数
     * @param userName
     * @return
     */
    Integer selectCountByUserName(String userNamep);
    
    
    /**
     * 查询用户
     * @param record
     * @return
     */
    public Page<SysUserDTO> selectUserList(); 
    
    
    public List<SysUserDTO> querySysUsers(SysUserParamDTO sysUserParamDTO); 
    
    /**
     * 获取所有面签角色数量
     * @return
     */
    public Integer selectFacesigRoleNumber();
    
    
    /**通过角色查询用户
     * @author 何杰
     * 2018年5月20日
     * @param roleCode
     * @return
     */
    public List<SysUserDTO> selectUserByRoleCode(SysRoleDTO sysRoleDTO);
    
    /**
     * 记录用户登录信息
     * @param userCode
     * @param loginIp
     * @return
     */
    public int insertLoginInfo(@Param("userCode")String userCode,@Param("loginIp")String loginIp);
    
    /**
     * 查询用户最近一次登录信息
     * @return
     */
    public UserLoginInfoDTO selectLastLoginInfo(String userCode);
    
    /**
     * 更新密码
     * @param user
     * @return
     */
    public int updatePassword(SysUserDTO user);
    
    /**
     * 查询所有用户
     * @param ignoreUserCode 需要忽略的userCode
     * @return
     * @throws MarvelsBusinessException
     */
    public List<SysUserDTO> selectUserListIgnore(@Param("ignoreUserCodeList")List<String> ignoreUserCodeList);
}